#include <stdio.h>
/*
冒泡排序：
通过不断比较相邻的元素
将数组大的元素往后冒
从而实现排序的过程

将第一个元素和第二个元素进行比较，如果前者大于后者，则进行交换
然后，再比较第二个元素和第三个元素进行比较，如果前者大于后者，则进行交换
依次类推，直到最大的元素被移动到最后的位置
然后进行第二轮比较，直到次大的元素被移动到倒数第二的位置
依次类推
*/


void BubbleSort(int* a, int n)
{
	int i, j, k;
	int tmp = 0;
	int m = 0;
	if( n != 1)
	{
		for(i = n-1; i > 0; i--)
		{
			for(j = 0; j < i; j++)
			{
				if(a[j] > a[j+1])
				{
					tmp = a[j+1];
					a[j+1] = a[j];
					a[j] = tmp;
				}
			}
			printf("第%d轮排序数组：", ++m);
			for(k = 0; k < n; k++)
			{
				printf("%d ", a[k]);
			}
			printf("\n");
		}
	}

}

int main()
{
   /*  Write C code in this online editor and run it. */
    int a[8] = {8,7,6,5,4,3,2,1};
	int n = sizeof(a) / sizeof(a[0]);
	int k;
	
	printf("原始数组：");
	for(k = 0; k < n; k++)
	{
		printf("%d ", a[k]);
	}
	printf("\n");
	
	BubbleSort(a, n);
	
	printf("排序数组：");
	for(k = 0; k < n; k++)
	{
		printf("%d ", a[k]);
	}
	printf("\n");
   
   return 0;
}

/*
原始数组：8 7 6 5 4 3 2 1 
第1轮排序数组：7 6 5 4 3 2 1 8 
第2轮排序数组：6 5 4 3 2 1 7 8 
第3轮排序数组：5 4 3 2 1 6 7 8 
第4轮排序数组：4 3 2 1 5 6 7 8 
第5轮排序数组：3 2 1 4 5 6 7 8 
第6轮排序数组：2 1 3 4 5 6 7 8 
第7轮排序数组：1 2 3 4 5 6 7 8 
排序数组：1 2 3 4 5 6 7 8 
*/